import server.server.Server;
import server.server.User;
import server.util.mod.ModBase;

/**
 * mods.PrivilegeGroup
 * 特权组管理模组
 * 服务器核心模组
 */
public class PrivilegeGroup implements ModBase {

	@Override
	public String listenStr() {
		return "/gm";
	}

	@Override
    public void exec(String[] args, Server server, User sender) {
        if (args.length >= 3) {
            switch (args[1]) {
                case "su":
                    try {
                        int p = Integer.parseInt(args[2]);
                        if (p <= 2 && p >= 0) {
                            sender.setPrivilege(p);
                            server.sendMsgTo("【系统消息】 设置成功！", sender);
                            return;
                        }
                        server.sendMsgTo("【系统消息】 没有这个特权级！", sender);
                    } catch (Exception e) {
                        server.sendMsgTo("【系统消息】 不是数字！", sender);
                    }
                    break;
                case "setUID":
                    try {
                        int uid = Integer.parseInt(args[2]);
                        for (User l : server.clientList) {
                            if (l.getUID() == uid) {
                                server.sendMsgTo("【系统消息】 UID重复！", sender);
                                return;
                            }
                        }
                        sender.setUID(uid);
                        server.sendMsgTo("【系统消息】 设置成功！", sender);
                    } catch (Exception e) {
                        server.sendMsgTo("【系统消息】 不是数字！", sender);
                    }
                    break;
                case "setName":
                    sender.setName(args[2]);
                    server.sendMsgTo("【系统消息】 设置成功！", sender);
                    break;
                case "get":
                    if (args[2].equals("-s")) {
                        server.sendMsgTo("【系统消息】 你的特权级是【" + sender.getPrivilege() + "】", sender);
                    } else if (args[2].equals("-u")) {
                        if (args.length < 4) {
                            server.sendMsgTo("【系统消息】 命令格式不正确！", sender);
                            return;
                        }
                        for (User l : server.clientList) {
                            if ((l.getUID() + "").equals(args[3])) {
                                server.sendMsgTo("【系统消息】 用户【" + l.getName() + "】的特权级是【" + l.getPrivilege() + "】", sender);
                                return;
                            }
                        }
                        server.sendMsgTo("【系统消息】 没有那个用户！", sender);
                    } else {
                        for (User l : server.clientList) {
                            if (l.getName().equals(args[2])) {
                                server.sendMsgTo("【系统消息】 用户【" + l.getName() + "】的特权级是【" + l.getPrivilege() + "】", sender);
                                return;
                            }
                        }
                        server.sendMsgTo("【系统消息】 没有那个用户！", sender);
                    }
                    break;
                case "silent":
                    if (sender.getPrivilege() <= 1) {
                        if (args.length == 3) {
                            for (User l : server.clientList) {
                                if (l.getName().equals(args[2])) {
                                    if (!l.isSilent()) {
                                        server.sendMsgTo("【系统消息】 您已被禁言！", l);
                                        l.setSilent(true);
                                    }
                                    server.sendMsgTo("【系统消息】 该用户已经被禁言！", sender);
                                    return;
                                }
                            }
                            server.sendMsgTo("【系统消息】 没有那个用户！", sender);
                            return;
                        } else {
                            if (args[2].equals("-u")) {
                                for (User l : server.clientList) {
                                    if ((l.getUID() + "").equals(args[3])) {
                                        if (!l.isSilent()) {
                                            server.sendMsgTo("【系统消息】 您已被禁言！", l);
                                            l.setSilent(true);
                                        }
                                        server.sendMsgTo("【系统消息】 该用户已经被禁言！", sender);
                                        return;
                                    }
                                }
                                server.sendMsgTo("【系统消息】 没有那个用户！", sender);
                                return;
                            }
                        }
                        server.sendMsgTo("【系统消息】 命令格式不正确！", sender);
                    } else {
                        server.sendMsgTo("【系统消息】 没有权限！", sender);
                    }
                    break;
                case "stopSilent":
                    if (sender.getPrivilege() <= 1) {
                        if (args.length == 3) {
                            for (User l : server.clientList) {
                                if (l.getName().equals(args[2])) {
                                    if (l.isSilent()) {
                                        server.sendMsgTo("【系统消息】 您已被解除禁言！", l);
                                        l.setSilent(false);
                                    }
                                    server.sendMsgTo("【系统消息】 该用户已经解除禁言！", sender);
                                    return;
                                }
                            }
                            server.sendMsgTo("【系统消息】 没有那个用户！", sender);
                            return;
                        } else {
                            if (args[2].equals("-u")) {
                                for (User l : server.clientList) {
                                    if ((l.getUID() + "").equals(args[3])) {
                                        if (l.isSilent()) {
                                            server.sendMsgTo("【系统消息】 您已被解除禁言！", l);
                                            l.setSilent(false);
                                        }
                                        server.sendMsgTo("【系统消息】 该用户已经解除禁言！", sender);
                                        return;
                                    }
                                }
                                server.sendMsgTo("【系统消息】 没有那个用户！", sender);
                                return;
                            }
                        }
                        server.sendMsgTo("【系统消息】 命令格式不正确！", sender);
                    } else {
                        server.sendMsgTo("【系统消息】 没有权限！", sender);
                    }
                    break;
                case "T":
                    if (sender.getPrivilege() == 0) {
                        if (args.length == 3) {
                            for (User l : server.clientList) {
                                if (l.getName().equals(args[2])) {
                                    server.sendMsgTo("【系统消息】 您已被请出聊天室！", l);
                                    l.shutdown();
                                    server.sendMsgTo("【系统消息】 该用户已经被请出聊天室！", sender);
                                    return;
                                }
                            }
                            server.sendMsgTo("【系统消息】 没有那个用户！", sender);
                            return;
                        } else {
                            if (args[2].equals("-u")) {
                                for (User l : server.clientList) {
                                    if ((l.getUID() + "").equals(args[3])) {
                                        server.sendMsgTo("【系统消息】 您已被请出聊天室！", l);
                                        l.shutdown();
                                        server.sendMsgTo("【系统消息】 该用户已经被请出聊天室！", sender);
                                        return;
                                    }
                                }
                                server.sendMsgTo("【系统消息】 没有那个用户！", sender);
                                return;
                            }
                        }
                        server.sendMsgTo("【系统消息】 命令格式不正确！", sender);
                    } else {
                        server.sendMsgTo("【系统消息】 没有权限！", sender);
                    }
                    break;
                default:
                    server.sendMsgTo("【系统消息】 命令格式不正确！", sender);
                    break;
            }
        } else {
            server.sendMsgTo("【系统消息】 命令格式不正确！", sender);
        }
    }
    
    @Override
    public String helper() {
        return "特权组管理器\n" + "/gm su <特权级> 获取指定特权级(测试用指令)\n" + "/gm setUID <UID> 设置自己的UID(测试用指令)\n"
                + "/gm setName <用户名> 设置自己的用户名(测试用指令)\n" + "/gm get -s 查看自己的特权级\n" + "/gm get <用户名> 查看指定用户的特权级 - "
                + "/gm get -u <UID> 查看指定UID用户的特权级\n" + "/gm silent <用户名> 禁言指定用户 - " + "/gm silent -u <UID> 禁言指定UID的用户\n"
                + "/gm stopSilent <用户名> 取消禁言 - " + "/gm stopSilent -u <UID> 取消禁言\n" + "/gm T <用户名> 踢出用户 - "
                + "/gm T -u <UID> 踢出指定UID的用户\n\n" + "权限说明：\n" + "0：最高权限；能够t出用户，禁言\n" + "1：中级权限；能够禁言\n" + "2：普通权限；只能够发言";
    }
    
    @Override
    public int eventRegister() {
        return RECEIVED;
    }

    @Override
    public boolean onUserMsgReceived(String msg, Server server, User user) {
        if (user.isSilent()) {
            server.sendMsgTo("【系统消息】 您已被禁言！", user);
            return false;
        } else {
            return true;
        }
    }
}